#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
inline int read(){
	int x=0;
	char ch=getchar();
	while(ch<'0'||ch>'9') ch=getchar();
	while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
	return x;
}
inline void write(int x){
	if(x>9) write(x/10);
	putchar(x%10+'0');
}
#define dqi deque<int>
#define vit vector<dqi>::iterator
int n,s[N],cnt;
dqi tmp;
struct node{
	dqi q;
	int l,r;
}a[N];
struct list{
	int s,t;
	inline void erase(int x){
		dqi emp;
		swap(a[x].q,emp);
		a[a[x].l].r=a[x].r;
		a[a[x].r].l=a[x].l;
	}
}lst;
int main(){
	freopen("fruit.in","r",stdin);
	freopen("fruit.out","w",stdout);
	n=read();
	lst.s=0,lst.t=n+1;
	for(int i=1;i<=n;i++){
		s[i]=read();
		if(s[i]==s[i-1])
			tmp.push_back(i);
		else{
			if(i!=1){
				cnt++;
				a[cnt]={tmp,cnt-1,n+1};
				a[cnt-1].r=cnt;
			}
			tmp.clear();
			tmp.push_back(i);
		}
	}
	cnt++;
	a[cnt]={tmp,cnt-1,n+1};
	a[cnt-1].r=cnt;
	while(a[lst.s].r!=lst.t){
		queue<int>ans;
		for(int i=a[lst.s].r;i!=lst.t;i=a[i].r){
			ans.push(a[i].q.front());
			a[i].q.pop_front();
		}
		while(!ans.empty()){
			write(ans.front()),putchar(' ');
			ans.pop();
		}
		putchar('\n');
		int st=clock();
		int i=0;
		for(int i=a[lst.s].r;i!=lst.t;i=a[i].r){
			if(a[i].q.size()==0){
				int l=a[i].l,r=a[i].r;
				if(l==lst.s){
					lst.erase(i);
					continue;
				}
				if(r==lst.t){
					lst.erase(i);
					break;
				}
				lst.erase(i);
				i=a[i].l;
				if(a[l].q.size()<a[r].q.size()){
					while(!a[l].q.empty())
						a[r].q.push_front(a[l].q.back()),a[l].q.pop_back();
					lst.erase(l);
					i=r;
				}else{
					while(!a[r].q.empty())
						a[l].q.push_back(a[r].q.front()),a[r].q.pop_front();
					lst.erase(r);
				}
			}
		}
	}
}
